import 'package:flutter/material.dart';
import 'src/core/picker_overlay.dart';
import 'src/models/picker_models.dart';

// [REFACTORED] 将 WeekItemBuilder 移到模型文件中，并保持公开
export 'src/models/picker_models.dart' show WeekItemBuilder, PickerMode, FilterType;

/// 一个封装好的应用级日期选择器，通过静态方法 `show` 来调用。
class OmniDatePicker {
  /// 显示日期选择器浮层
  ///
  /// @param context - BuildContext
  /// @param mode - 选择器模式，决定了UI和行为
  /// @param onConfirm - 点击“确定”按钮的回调，返回选择结果
  /// @param title - 可选的自定义标题
  /// @param weekItemBuilder - (仅在 filterDate 模式且 filterType 为 week 时有效) 自定义周列表项的UI构建器
  /// @param filterType - 当 mode 为 filterDate 时，指定筛选类型（周/月/年）
  /// @param initialDateTime - 初始显示的日期时间，默认为当前时间
  /// @param startTime - 可选的最小开始时间，用于限制选择范围
  /// @param yearsBack - 在筛选模式下，从当前年份回溯的年数
  /// @param showLaterTime - 是否允许选择未来的时间，默认为 true
  /// @param onChange - （可选）当选择值变化时的实时回调
  /// @param onCancel - （可选）点击“取消”或遮罩时的回调
  static void show({
    required BuildContext context,
    required PickerMode mode,
    required Function(dynamic) onConfirm,
    String? title,
    WeekItemBuilder? weekItemBuilder,
    FilterType? filterType,
    DateTime? initialDateTime,
    DateTime? startTime,
    int? yearsBack,
    bool? showLaterTime,
    Locale? locale,
    Function(dynamic)? onChange,
    Function()? onCancel,
  }) {
    final effectiveLocale = locale ?? Localizations.maybeLocaleOf(context) ?? const Locale('zh');

    // [REFACTORED] 将 Overlay 的创建和管理逻辑完全封装在 PickerOverlay 中
    // 这样主入口文件非常干净
    PickerOverlay.show(
      context: context,
      mode: mode,
      onConfirm: onConfirm,
      title: title,
      weekItemBuilder: weekItemBuilder,
      filterType: filterType,
      initialDateTime: initialDateTime,
      startTime: startTime,
      yearsBack: yearsBack,
      showLaterTime: showLaterTime,
      locale: effectiveLocale,
      onChange: onChange,
      onCancel: onCancel,
    );
  }
}
